package com.superjson.showpro.base;

import com.superjson.showpro.shared.result.Result;

import java.util.List;

/**
 * 基类服务
 *
 * @param <T>
 * @author baoya
 * @since 1.1.0
 */
public interface GenericService<T> {

    /**
     * 获取当前对象
     *
     * @param id 当前类对象的主键id
     * @return 获取当前实现类的对象
     */
    Result<T> get(final Long id);

    /**
     * 根据以逗号分割的主键获取当前类对象的集合，比如1,2,3...
     *
     * @param ids 类对象的以逗号分割的主键，1,2,3
     */
    Result<List<T>> get(final String ids);

    /**
     * 判断当前对象是否存在
     *
     * @param id 具体实现类对象的id
     * @return 如果当前对象存在，返回true，不存在，返回false
     */
    Result<Boolean> exists(final Long id);

    /**
     * 保存当前对象
     *
     * @param object 具体实现类对象
     * @return
     */
    Result<T> save(T object);

    /**
     * 更新当前对象
     *
     * @param object 实现类的对象
     * @return
     */
    @Deprecated
    Result<T> update(T object);

    /**
     * 删除指定主键id的对象
     *
     * @param id                 当前对象id
     * @param isPhysicallyDelete false 表示逻辑删除，即将is_deleted字段置为1，
     *                           true 物理删除 将编号为id的数据对象删除
     * @return
     */
    Result delete(final Long id, final boolean isPhysicallyDelete);

    /**
     * 删除指定以逗号分割的主键字符串的对象
     *
     * @param ids                当前一系列对象ids
     * @param isPhysicallyDelete false 表示逻辑删除，即将is_deleted字段置为1，
     *                           true 物理删除 将编号为id的数据对象删除
     * @return
     */
    Result deleteBatch(final String ids, final boolean isPhysicallyDelete);


}
